package cc.rengu.igas.bomp.core.realize;

import cc.rengu.igas.bomp.common.entity.MchntBaseInfo;

/**
 * @author: zhangxuran
 * @Date: 2020/4/26 10:11
 * @Description: 商户入驻校验
 */
public interface MchntVerifyService {


    /**
     * 检查商户黑名单
     *
     * @param instId
     * @param mchntNo
     */
    boolean checkMchntBlackInfo(String instId, String mchntNo) throws Exception;

    /**
     * 黑名单查询
     *
     * @param mchntNetworkDomain 网络域名
     * @return 是否为黑名单
     * @throws Exception 异常
     */
    boolean checkMchntBlackInfoByMchntNetworkDomain(String mchntNetworkDomain) throws Exception;

    /**
     * 校验法人签约数是否超过最大限制数
     *
     * @param instId    机构号
     * @param artifNo   法人证件号
     * @param artifType 法人证件类型
     * @throws Exception
     */
    void verifyLegalMaxByMchntSign(String instId, String artifNo, String artifType) throws Exception;

    /**
     * 校验营业执照是否超过最大限制数,调用时已过滤,证件类型“00”营业执照时校验
     *
     * @param instId      机构号
     * @param mchntNo     商户号
     * @param licenceType 证件类型
     * @param licenceCode 证件号
     * @throws Exception 异常
     */
    void verifyLicenceMaxByMchntSign(String instId, String mchntNo, String licenceType, String licenceCode) throws Exception;


    /**
     * 校验结算账户是否超过最大限制数
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     * @param acctNo  账户
     * @throws Exception 异常
     */
    void verifyAcctInfoMaxByMchntSettle(String instId, String mchntNo, String acctNo) throws Exception;

    /**
     * 校验商户是否满足D0提现
     *
     * @param mchntBaseInfo 商户信息
     * @return 是否满足
     * @throws Exception 异常
     */
    boolean verifyMchntAllowToD0(MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 校验商户是否满足D0提现
     *
     * @param mchntBaseInfo 商户信息
     * @return 是否满足
     * @throws Exception 异常
     */
    boolean verifyMchntAllowToWithdrawal(MchntBaseInfo mchntBaseInfo) throws Exception;

    /**
     * 六要素校验
     * <p>
     * 011-无结算信息,即使有(新增完后点上一步,修改后点下一步时,调的是修改,所以新增签约信息时,肯定没有结算信息)
     * 012-进行校验六要素是否重复
     * 021-进行校验六要素是否重复
     * 022-进行校验六要素是否重复
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     * @param oprType 操作类型
     *                011-新增签约信息
     *                012-新增结算信息
     *                021-修改签约信息
     *                022-修改结算信息
     * @return 校验结果
     * @throws Exception 异常
     */
    boolean verifySixElement(String instId, String mchntNo, String oprType) throws Exception;

    /**
     * 有营业执照的，结算账号必须录入对公户校验
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     * @param acctNo  结算账号
     * @return 校验结果
     * @throws Exception 异常
     */
    boolean verifyCorporateAccount(String instId, String mchntNo, String acctNo) throws Exception;

    /**
     * 黑名单查询
     *
     * @param artifCertType 法人证件类型
     * @param artifCertNo   法人证件号
     * @return 是否为黑名单
     * @throws Exception 异常
     */
    boolean checkMchntBlackInfoByLegalInfo(String artifCertType, String artifCertNo) throws Exception;


    /**
     * 黑名单查询
     *
     * @param LicenceCode 商户证件号
     * @return 是否为黑名单
     * @throws Exception 异常
     */
    boolean checkMchntBlackInfoByLicenceCode(String LicenceCode) throws Exception;
}
